/*
 * Copyright (C) 2024-2025 OpenAni and contributors.
 *
 * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
 * Use of this source code is governed by the GNU AGPLv3 license, which can be found at the following link.
 *
 * https://github.com/open-ani/ani/blob/main/LICENSE
 */

package me.him188.ani.app.data.repository.subject

import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import me.him188.ani.app.data.repository.user.SettingsRepository
import me.him188.ani.app.domain.usecase.UseCase
import me.him188.ani.datasources.api.EpisodeType

fun interface GetEpisodeTypeFiltersUseCase : UseCase {
    operator fun invoke(): Flow<List<EpisodeType>>
}

class GetEpisodeTypeFiltersUseCaseImpl(
    private val settingsRepository: SettingsRepository,
) : GetEpisodeTypeFiltersUseCase {
    private val allowed = listOf(EpisodeType.MainStory, EpisodeType.SP, EpisodeType.OVA, EpisodeType.OAD)

    override fun invoke(): Flow<List<EpisodeType>> = settingsRepository.debugSettings.flow.map {
        if (it.showAllEpisodes) {
            EpisodeType.entries
        } else {
            allowed
        }
    }

}